package day13;


/*
1.理解多态性: 可以理解为一个事物的多种形态
2. 何为多态性:
      对象的多态性，父类的引用指向子类的对象，(或子类的对象赋给父类的引用)
3. 多态的使用：当调用子父类同名参数的方法时，实际执行的是子类重写父类的方法---虚拟方法调用
    有了对象的多态以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法.
    简单的说就是编译,看左边,实际运行的结果看右边.
4. 多态的使用前提: 1.类的继承关系,2.方法的重写.
5. 对象的多态性: 只适用于方法,不适用于属性(属性和实际的运行结果都看左边),因为多态性:的前提是继承的重写,而属性是可以继承但是无法重写的

 */
public class Person2Test {
    public static void main(String[] args) {
        Person2 p1 = new Person2();
        p1.eat();
        p1.walk();

        System.out.println("****************************************");
        // 对象多态性: 父类的引用指向子类的对象
        Person2 p2 = new Man();
        p2.eat();
        p2.walk();
//        p2.earnMoney(); // 因为多态是通过父类的引用指向子类的，所以是不能调用父类中没有的重写的方法的，

        System.out.println("***************************************");
        Person2 p3 = new Woman();   // 父类的引用指向子类的对象.
        p3.eat();
        p3.walk();

        System.out.println("*****************************************");

        Person2 p4 = new Person2();
        System.out.println(p4.id);
        Person2 p5 = new Man();
        System.out.println(p5.id);  // 属性的多态:编译运行都看左边,左边是什么调用的就是什么.





    }
}
